
//验证pc还是移动
export const isPc = function () {
    const userAgentInfo = navigator.userAgent;
    const Agents = ['Android', 'iPhone',
        'SymbianOS', 'Windows Phone',
        'iPad', 'iPod'];
    let flag = true;
    for (let v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
            flag = false;
            break;
        }
    }
    return flag;
};

//验证属性是否为空
export function validatenull (val) {
    if (val instanceof Array) {
        if (val.length === 0) return true;
    } else if (val instanceof Object) {
        if (JSON.stringify(val) === '{}') return true;
    } else {
        if (val === 'null' || val === null || val === 'undefined' || val === undefined || val === '') return true;
        return false;
    }
    return false;
}

//验证合法uri
export function isURL (textval) {
    const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
    return urlregex.test(textval);
}

// 验证邮箱
export function isEmail (reg) {
    const str = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
    return reg.test(str)
}

//验证大写字母
export function validUpperCase (str) {
    const reg = /^[A-Z]+$/
    return reg.test(str)
}

//验证小写字母
export function validLowerCase (str) {
    const reg = /^[a-z]+$/
    return reg.test(str)
}

//验证大小写字母 只能是字母
export function isAlphabets (str) {
    const reg = /^[A-Za-z]+$/
    return reg.test(str);
}

//验证正整数 
export function isInt (str) {
    const reg = /^[1-9]*$/
    return reg.test(str);
}

//只能输入数字和字母和汉字
export function isNumStrChinese (str) {
    const reg = /^[a-zA-Z0-9\u4e00-\u9fa5]*$/
    return reg.test(str)
}


//只能输入由数字、26个英文字母或者下划线组成的字符串：
export const isAccount = (str) => {
    const regex = /^[a-zA-Z0-9_]+$/;
    if (!regex.test(str)) {
        regex.lastIndex = 0;
        return false;
    } else {
        regex.lastIndex = 0;
        return true;
    }
};

//密码只能由6-20字母和数字混合组成
export const isPwd = (str) => {
    const regex = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;
    if (!regex.test(str)) {
        regex.lastIndex = 0;
        return false;
    } else {
        regex.lastIndex = 0;
        return true;
    }
};

//判断姓名是否正确 2-4个正常汉字
export function isName (name) {
    const regName = /^[\u4e00-\u9fa5]{2,4}$/;
    if (!regName.test(name)) return false;
    return true;
}

// 验证身份证号码
export function cardid (code) {
    const list = [];
    let result = true;
    let msg = '';
    const city = {
        11: '北京',
        12: '天津',
        13: '河北',
        14: '山西',
        15: '内蒙古',
        21: '辽宁',
        22: '吉林',
        23: '黑龙江 ',
        31: '上海',
        32: '江苏',
        33: '浙江',
        34: '安徽',
        35: '福建',
        36: '江西',
        37: '山东',
        41: '河南',
        42: '湖北 ',
        43: '湖南',
        44: '广东',
        45: '广西',
        46: '海南',
        50: '重庆',
        51: '四川',
        52: '贵州',
        53: '云南',
        54: '西藏 ',
        61: '陕西',
        62: '甘肃',
        63: '青海',
        64: '宁夏',
        65: '新疆',
        71: '台湾',
        81: '香港',
        82: '澳门',
        91: '国外 '
    };
    if (!validatenull(code)) {
        if (code.length === 18) {
            if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
                msg = '证件号码格式错误';
            } else if (!city[code.substr(0, 2)]) {
                msg = '地址编码错误';
            } else {
                // 18位身份证需要验证最后一位校验位
                code = code.split('');
                // ∑(ai×Wi)(mod 11)
                // 加权因子
                const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                // 校验位
                const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'];
                let sum = 0;
                let ai = 0;
                let wi = 0;
                for (let i = 0; i < 17; i++) {
                    ai = code[i];
                    wi = factor[i];
                    sum += ai * wi;
                }
                const last = parity[sum % 11];
                if (parity[sum % 11] !== code[17]) {
                    msg = '证件号码校验位错误';
                } else {
                    result = false;
                }
            }
        } else {
            msg = '证件号码长度不为18位';
        }
    } else {
        msg = '证件号码不能为空';
    }
    list.push(result);
    list.push(msg);
    return list;
}
